﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PacManLib
{
    /// <summary>
    /// For notes on how to implement this interface see:
    /// http://code.google.com/p/opmf/wiki/AIInterfaces
    /// </summary>
    public interface IGhostAI
    {
        /// <summary>
        /// Returns the 'nickname' of the AI, e.g. "Spooky"
        /// </summary>
        String getAIName();

        /// <summary>
        /// Returns the real name of the coder, e.g. "John Smith"
        /// </summary><remarks>
        /// This is used to distinguish AIs in a competition if more
        /// than one person uses the same AI name.
        /// </remarks>
        String getCodersName();

        /// <summary>
        /// Returns the desired direction for a ghost.
        /// </summary><remarks>
        /// This is called during game-play when your AI is controlling
        /// a ghost. If you are controlling more than one ghost, it will 
        /// be called once for each ghost you control.
        /// 
        /// You are passed a version of the Board that has limited visibilty
        /// of the state-of-play. Ghosts only have line-of-sight information,
        /// so you only see pellets and the Pac-Man if they are in the current
        /// line-of-sight of your ghost.
        /// 
        /// You are also passed the current position and direction of your
        /// ghost.
        /// 
        /// You return the desired-direction for your ghost. (See the wiki
        /// for details about "desired-direction".)
        /// </remarks>
        PlayerInfo.Direction getDesiredDirection(Board board, PlayerInfo ghostInfo);
    }
}
